登錄網(wǎng)站時(shí),服務(wù)器返回一串字符;調(diào)用API時(shí),需要在請(qǐng)求頭里塞一段密文;談?wù)摷用茇泿艜r(shí),動(dòng)不動(dòng)說“發(fā)了多少Token”……“Token”這個(gè)詞在技術(shù)圈被高頻使用,但很多人對(duì)它的理解是模糊的:它是一段字符串?是一個(gè)加密憑證?還是代表某種價(jià)值的數(shù)字資產(chǎn)?
其實(shí),Token的原意是“令牌”或“代幣”,本質(zhì)上是一串具有特定含義的數(shù)據(jù)。它在不同領(lǐng)域扮演著不同的角色:在Web開發(fā)中,它是身份認(rèn)證的憑證;在區(qū)塊鏈?zhǔn)澜缋铮莾r(jià)值流通的載體。在此,小編將從這兩個(gè)維度,深入淺出地解析Token的核心概念、常見類型及應(yīng)用實(shí)踐。
在現(xiàn)實(shí)世界中,令牌是一種“授權(quán)憑證”。比如你去洗浴中心,前臺(tái)給你一個(gè)手牌,憑手牌可以開柜子、消費(fèi)記帳。手牌本身沒有價(jià)值,但它關(guān)聯(lián)了后臺(tái)的身份信息和服務(wù)權(quán)限。
數(shù)字世界中的Token也是如此。它是一個(gè)字符串(通常經(jīng)過加密或簽名),客戶端持有它,服務(wù)器端能夠驗(yàn)證它,從而確認(rèn)“你是誰”“你能做什么”。Token的出現(xiàn),解決了傳統(tǒng)Session認(rèn)證在分布式系統(tǒng)中的諸多痛點(diǎn),也為區(qū)塊鏈的去中心化交易提供了基礎(chǔ)。
在Web開發(fā)領(lǐng)域,Token最常見的應(yīng)用場(chǎng)景是無狀態(tài)身份認(rèn)證。早期網(wǎng)站使用Session(會(huì)話)——用戶登錄后,服務(wù)器在內(nèi)存中存儲(chǔ)一個(gè)Session ID,瀏覽器用Cookie攜帶它。但在微服務(wù)、移動(dòng)端、跨域請(qǐng)求等場(chǎng)景下,Session方式捉襟見肘。于是,基于Token的認(rèn)證方案成為主流。
JWT是一種開放標(biāo)準(zhǔn)(RFC 7519),它將用戶信息封裝成三段式字符串:Header(頭部)、Payload(載荷)、Signature(簽名),每段用Base64Url編碼,點(diǎn)號(hào)連接。
Header:聲明簽名算法(如HS256或RS256)和Token類型。
Payload:存放用戶身份信息(如user_id、role)以及過期時(shí)間(exp)、簽發(fā)時(shí)間(iat)等聲明。
Signature:對(duì)前兩部分進(jìn)行簽名,防止篡改。
客戶端收到JWT后,后續(xù)請(qǐng)求直接在HTTP頭中攜帶(如Authorization: Bearer <JWT>),服務(wù)器通過驗(yàn)證簽名和過期時(shí)間來判斷合法性和時(shí)效性。
優(yōu)點(diǎn):無需服務(wù)端存儲(chǔ)會(huì)話,天然適合分布式系統(tǒng);跨語言、跨平臺(tái)。
缺點(diǎn):一旦簽發(fā),在有效期內(nèi)無法主動(dòng)撤銷(除非配合黑名單機(jī)制);Payload體積較大,會(huì)增加請(qǐng)求頭大小。
Bearer Token就是一個(gè)隨機(jī)生成的字符串(如UUID或哈希值),沒有任何內(nèi)部結(jié)構(gòu)??蛻舳嗽谡?qǐng)求頭中攜帶Bearer <token>,服務(wù)器根據(jù)這個(gè)字符串去數(shù)據(jù)庫或緩存中查詢對(duì)應(yīng)的用戶和權(quán)限。
它常用于OAuth 2.0授權(quán)框架中,作為訪問令牌(Access Token)。與JWT相比,Bearer Token的優(yōu)點(diǎn)是體積小,且服務(wù)端可以隨時(shí)失效(只要?jiǎng)h除存儲(chǔ)記錄即可)。缺點(diǎn)是每次請(qǐng)求都需要查詢后端存儲(chǔ),增加延遲。
Access Token的有效期通常很短(如15分鐘-2小時(shí)),以減少泄露風(fēng)險(xiǎn)。但在用戶體驗(yàn)上,頻繁要求用戶重新登錄很糟糕。于是有了Refresh Token:攜帶更長的有效期(如7天或30天),客戶端可以用它去認(rèn)證服務(wù)器換取新的Access Token,而無需用戶重新輸入密碼。
Refresh Token通常存儲(chǔ)在HTTP-only Cookie或移動(dòng)端的安全存儲(chǔ)中,僅用于“刷新”這一特定接口,不能用于訪問業(yè)務(wù)資源。
用戶登錄流程:
客戶端提交用戶名/密碼 → 服務(wù)器驗(yàn)證通過 → 生成Access Token(JWT形式,有效期2h)和Refresh Token(隨機(jī)字符串,存儲(chǔ)于Redis,有效期7d)→ 返回給客戶端。
客戶端將Access Token存入內(nèi)存或本地存儲(chǔ),將Refresh Token存入HttpOnly Cookie。
后續(xù)API請(qǐng)求攜帶Authorization: Bearer <Access Token>。
Access Token過期后,客戶端使用Refresh Token調(diào)用/refresh接口,服務(wù)器驗(yàn)證Refresh Token有效后,簽發(fā)新的Access Token。
API網(wǎng)關(guān)中的Token校驗(yàn):微服務(wù)架構(gòu)中,網(wǎng)關(guān)層統(tǒng)一解析JWT,提取用戶身份信息后轉(zhuǎn)發(fā)給下游服務(wù),避免每個(gè)服務(wù)重復(fù)驗(yàn)證。
如果說Web中的Token是“權(quán)限憑證”,那么區(qū)塊鏈中的Token則是“價(jià)值憑證”。它不依賴中央服務(wù)器,而是由去中心化網(wǎng)絡(luò)共同維護(hù)。根據(jù)功能不同,主要分為兩類。
最典型的就是比特幣、以太幣以及各類“山寨幣”。每個(gè)單位完全等價(jià),可以分割(例如0.001個(gè)比特幣)。在以太坊上,遵循ERC-20標(biāo)準(zhǔn)的代幣已成為行業(yè)規(guī)范。它們常用于支付、激勵(lì)、治理投票或代表某種權(quán)益(如積分、股權(quán))。
技術(shù)本質(zhì):智能合約維護(hù)一個(gè)地址到余額的映射表,用戶通過轉(zhuǎn)賬函數(shù)改變余額。Token本身不存儲(chǔ)業(yè)務(wù)邏輯,只是合約中的一個(gè)數(shù)字。
每個(gè)NFT擁有唯一的標(biāo)識(shí)符和元數(shù)據(jù),不可分割,也不等價(jià)。它被用來代表數(shù)字藝術(shù)品、游戲道具、域名、甚至房產(chǎn)憑證。以太坊的ERC-721和ERC-1155是主流標(biāo)準(zhǔn)。
與Web Token的本質(zhì)區(qū)別:Web中的Token由中心化服務(wù)器驗(yàn)證,區(qū)塊鏈Token由共識(shí)網(wǎng)絡(luò)驗(yàn)證,無需信任任何第三方機(jī)構(gòu)。
在去中心化金融(DeFi)中,Token不僅是“幣”,還可以是“流動(dòng)性憑證”或“治理權(quán)”。例如,用戶向去中心化交易所提供資金后,會(huì)獲得“LP Token”,代表其貢獻(xiàn)份額,贖回時(shí)可以取回本金+手續(xù)費(fèi)分紅。
此外,Token也常作為“Gas”來支付網(wǎng)絡(luò)手續(xù)費(fèi)。以以太坊為例,ETH本身就是一種原生Token,執(zhí)行智能合約需要消耗ETH。
| 維度 | Web Token(如JWT) | 區(qū)塊鏈Token(如ERC-20) |
|---|---|---|
| 本質(zhì) | 權(quán)限憑證,不具價(jià)值 | 價(jià)值載體,可流通交易 |
| 存儲(chǔ)方式 | 客戶端(localStorage / Cookie)或服務(wù)端(Redis) | 分布式賬本(區(qū)塊鏈上) |
| 驗(yàn)證方式 | 驗(yàn)證簽名 + 過期時(shí)間(中心化) | 全網(wǎng)節(jié)點(diǎn)通過共識(shí)算法驗(yàn)證 |
| 可撤銷性 | 服務(wù)端可主動(dòng)銷毀(如將Token加入黑名單) | 除非智能合約硬編碼,否則不可撤銷(但可凍結(jié)地址) |
| 匿名性 | 通常與真實(shí)身份關(guān)聯(lián) | 可控匿名,只有地址 |
| 典型應(yīng)用 | 用戶登錄、API訪問控制 | 加密貨幣、去中心化金融、NFT |
無論是Web中的JWT,還是加密貨幣錢包里的私鑰(本質(zhì)上也是Token的一種),安全都是使用Token的第一要?jiǎng)?wù)。
使用HTTPS:防止Token在傳輸過程中被竊聽。
選擇合適的存儲(chǔ)位置:敏感度高的Token(如Refresh Token)應(yīng)放在HttpOnly Cookie中,避免XSS攻擊竊取。訪問業(yè)務(wù)的Access Token可放在內(nèi)存或localStorage,但需配合短過期時(shí)間。
設(shè)置合理的過期時(shí)間:Access Token不超過2小時(shí),Refresh Token不超過7-30天。
禁用自動(dòng)簽發(fā)過長有效期的Token:用戶退出時(shí),應(yīng)主動(dòng)將Refresh Token失效。
使用強(qiáng)簽名算法:JWT不要使用none算法或弱密鑰。
私鑰離線存儲(chǔ):使用硬件錢包或冷存儲(chǔ),防止網(wǎng)絡(luò)攻擊。
警惕授權(quán)簽批:不要隨意向未知項(xiàng)目授權(quán)Token使用權(quán)(即“Approve”操作),避免被惡意合約盜取資產(chǎn)。
驗(yàn)證合約地址:確保參與的DeFi項(xiàng)目合約經(jīng)過安全審計(jì)。
在Web3.0概念興起的當(dāng)下,Web中的身份Token與區(qū)塊鏈中的價(jià)值Token正在逐漸融合。例如,去中心化身份(DID) 系統(tǒng)使用自控制的Token來代表用戶身份,可跨平臺(tái)認(rèn)證,無需任何中心化服務(wù)器。另外,靈魂綁定Token(Soulbound Token) 被設(shè)計(jì)為不可轉(zhuǎn)讓的身份憑證,用于記錄學(xué)歷、資格、聲譽(yù)等社會(huì)關(guān)系。
而在傳統(tǒng)的Web開發(fā)領(lǐng)域,Token技術(shù)也在進(jìn)化:Faas(函數(shù)即服務(wù)) 中使用輕量級(jí)JWT進(jìn)行冷啟動(dòng)驗(yàn)證;零知識(shí)證明(ZKP) 技術(shù)讓Token在不暴露用戶信息的前提下完成身份驗(yàn)證。
Token這個(gè)詞之所以讓人困惑,是因?yàn)樗鼨M跨了“權(quán)限”和“價(jià)值”兩個(gè)看似無關(guān)的領(lǐng)域。但它們的底層邏輯是相通的:用一個(gè)可驗(yàn)證的數(shù)據(jù)片段,替代了對(duì)中心的直接信任——無論是信任一個(gè)登錄狀態(tài),還是信任一筆資產(chǎn)。
當(dāng)你下次登錄網(wǎng)站時(shí),可以想一想:哦,瀏覽器里正藏著一個(gè)JWT。當(dāng)你打開加密錢包時(shí),也可以意識(shí)到:那些數(shù)字其實(shí)是區(qū)塊鏈上的Token。理解Token,就是理解現(xiàn)代數(shù)字世界的運(yùn)行規(guī)則。
手機(jī): +86 13923405632
